#ifndef MYSQLCONTROLLER_H
#define MYSQLCONTROLLER_H
#include <QString>
#include <QVector>

typedef struct{
    QString orgcty;      //起点城市
    QString Pftn_Org;    //起点城市所属地级市
    QString Prvn_Org;    //起点城市所属省份
    QString orgap;       //起点机场
    QString dstcty;      //终点城市
    QString Pftn_Dstnt;  //终点城市所属地级市
    QString Prvn_Dstnt;  //终点城市所属省份
    QString desap;       //终点机场
    QString airlines;    //航空公司
    QString flight;      //航班
    QString arcfttp;     //机型
    QString dpttm;       //出发时间
    QString arvtm;       //到达时间
    QString ptalt;       //准点率
    QString Mon;         //周一是否有班次，下面类似
    QString Tur;
    QString Wes;
    QString Thur;
    QString Fri;
    QString Sat;
    QString Sun;
    QString dirtime;     //航程时间
    int eco_price;       //经济舱价格
    int fir_price;       //头等舱价格
    int id;              //订单id
    QString name;
    QString username;
    int age;
    QString gender;
    QString buyer_name;
    QString passenger_name;
    QString passenger_idnum;
    QString buyer_idnum;
    int month;
    int day;
    QString weekday;

}flightinfo;

typedef struct{
    QString name;
    QString idnum;
}person;

class MysqlController {

public:
    MysqlController();

    //直达，中转，往返，多程四种航线查询结果
    QVector<flightinfo> flightinfos;
    QVector<flightinfo> trans1,trans2;
    QVector<flightinfo> round1,round2;
    QVector<flightinfo> multi1,multi2;

    //直达，中转，往返，多程四种航线订单信息
    QVector<flightinfo> order_dir;
    QVector<flightinfo> order_trans1,order_trans2;
    QVector<flightinfo> order_round1,order_round2;
    QVector<flightinfo> order_multi1,order_multi2;

    //中转时间
    QVector<QString> dirtime;

    //航班号查询结果
    QVector<flightinfo> SearchInfo;

    //亲属数组
    QVector<person> relatives;

    //1.账号操作
    //type是账户类型：type=0为用户，type=1为管理员
    int Login(QString username,QString password,int type);  //登录 成功返回0，失败返回1
    int Register(QString username,QString password,int type);  //注册 成功返回0，失败返回1
    void ClearUser(int type); //清除所有type类型的账户
    void DeleteUser(QString username,int type); //删除某个账户

    void Certify(QString username,QString name,int age,QString gender,QString idnum);//实名认证
    int AddRelatives(QString name,QString relative_name,QString relative_idnum); //添加亲属
    void SearchRelatives(QString name);//查找亲属，返回在数组relatives中

    QString FindName(QString username);
    QString FindIdnum(QString username);



    //2.航班操作

    void FindFlights(QString orgcty,QString dstcty,QString weekday);
    //查找所有对应起始城市与目的地城市，以及在该天有班次的航班。orgcty:起始地，dstcty:目的地，weekday:星期几的英文缩写。查询结果返回到vector数组MC.flightinfos中
    //例如 MC.FindFlights("郑州","深圳","Mon"); 周一到周日的缩写分别为Mon,Tur,Wes,Thur,Fri,Sat,Sun
    //注意城市名只写郑州，深圳即可，不带“市”字

    void FindTrans(QString orgcty,QString dstcty,QString weekday);
    //查找中转航线，只转一站，两条航线分别存在trans1和trans2数组里

    void FindRoundWays(QString orgcty,QString dstcty,QString day1,QString day2);
    //查找往返航线，两条航线分别存在round1和round2数组里

    void FindMultiWays(QString cty1,QString cty2,QString cty3,QString day1,QString day2);
    //查找多程航线，两条航线分别存在multi1和multi2数组里


    //3.订单操作

    //添加四种类型的订单,name,age,gender分别为乘客的姓名年龄和性别
    //buyer_name和buyer_idnum是购买人的名字和身份证号；passenger_name和passenger_idnum是乘坐人的名字和身份证号
    //年龄和性别可以从身份证号里得到，所以不用存
    void AddOrder_dir(flightinfo f,QString buyer_name,QString buyer_idnum,QString passenger_name,QString passenger_idnum,int month,int day,QString weekday);
    void AddOrder_trans(flightinfo trans1,flightinfo trans2,QString buyer_name,QString buyer_idnum,QString passenger_name,QString passenger_idnum,int month,int day,QString weekday);
    void AddOrder_rounds(flightinfo round1,flightinfo round2,QString buyer_name,QString buyer_idnum,QString passenger_name,QString passenger_idnum,int month,int day,QString weekday);
    void AddOrder_multis(flightinfo multi1,flightinfo multi2,QString buyer_name,QString buyer_idnum,QString passenger_name,QString passenger_idnum,int month,int day,QString weekday);


    //删除四种订单，其中t是订单数组的下标。比如 DeleteOrder_trans(1) 表示删除order_trans1[1]和order_trans2[1]
    void DeleteOrder_dir(int t);


    void ClearOrders();
    //清空所有订单

    void ShowOrders(QString name);
    //查询订单，查询结果分别存在四种order数组中

    void SearchOrders(QString idnum);

    //4.查询航班号对应的航线，查询结果存在SearchInfo数组中
    void SearchFlight(QString info);

};


#endif // MYSQLCONTROLLER_H
